﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IFilterPlugins.cs" company="None">
//   <Author>Adrian von Allmen, 2013</Author>
// </copyright>
// <summary>
//   The FilterPlugins interface.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace CrumbleLibrary
{
    using System.Collections.Generic;
    using System.Collections.ObjectModel;

    /// <summary>
    /// The FilterPlugins interface.
    /// </summary>
    public interface IFilterPlugins
    {
        /// <summary>
        /// Get Assembly Build Version.
        /// </summary>
        string GetVersion { get; }

        /// <summary>
        /// Get the Display Name for Tab or other visual
        /// </summary>
        string GetDisplayName { get; }

        /// <summary>
        /// Gets a list with all static parameter and their valies
        /// </summary>
        Dictionary<string, object> StaticParameterList { get; }

        /// <summary>
        /// Gets a list with all dynamically added parameters and their values.
        /// </summary>
        ObservableCollection<FilterItemDynamic> DynamicParameterList { get; }

        /// <summary>
        /// The set default value.
        /// </summary>
        /// <param name="wpfName"> The ID Name within XAML </param>
        /// <param name="defaultValue"> The default value to attach </param>
        void SetDefaultValue(string wpfName, object defaultValue);

        /// <summary>
        /// The set filter visibility.
        /// </summary>
        /// <param name="wpfName"> The ID Name within XAML </param>
        /// <param name="isVisible"> Visibility State. </param>
        void SetFilterVisibility(string wpfName, bool isVisible);

        /// <summary>
        /// The set filter feature.
        /// </summary>
        /// <param name="wpfName"> The ID Name within XAML </param>
        /// <param name="settingInfo"> The setting info. </param>
        void SetFilterFeature(string wpfName, string settingInfo);

        /// <summary>
        /// The attach dynamic filter item.
        /// </summary>
        /// <param name="name"> The name of the dynamic parameter. </param>
        /// <param name="value"> The value. </param>
        void AttachDynamicFilterItem(string name, FilterItemDynamic value);

        /// <summary>
        /// The save default settings
        /// </summary>
        void Save();
    }
}
